As the power and complexity of personal computer systems increase, graphics operations are increasingly being performed using dedicated graphics rendering devices referred to as graphics processing units (GPUs). As used herein, the terms “graphics processing unit” and “graphics processor” are used interchangeably. GPUs are often used in removable graphics cards that are coupled to a motherboard via a standardized bus (e.g., AGP, PCI, or PCI Express). GPUs may also be used in game consoles and in integrated graphics solutions (e.g., for use in some portable computers and lower-cost desktop computers). Although GPUs vary in their capabilities, they may typically be used to perform such tasks as rendering of two-dimensional (2D) graphical data, rendering of three-dimensional (3D) graphical data, accelerated rendering of graphical user interface (GUI) display elements, and digital video playback. A GPU may implement one or more application programmer interfaces (APIs) that permit programmers to invoke the functionality of the GPU.
To reduce demands on central processing units (CPUs) of computer systems, GPUs may be tasked with performing operations that would otherwise contribute to the CPU load. Accordingly, modern GPUs are typically implemented with specialized features for efficient performance of common graphics operations. For example, a GPU often includes multiple execution channels that can be used simultaneously for highly parallel processing. A GPU may include various built-in and configurable structures for rendering digital images to an imaging device.
Digital images may include raster graphics, vector graphics, or a combination thereof. Vector graphics data may be stored and manipulated as one or more geometric objects built with geometric primitives. The geometric primitives (e.g., points, lines, polygons, Bezier curves, and text characters) may be based upon mathematical equations to represent parts of digital images. Raster graphics data (also referred to as “bitmaps”) may be stored and manipulated as a grid of individual picture elements called pixels. A bitmap may be characterized by its width and height in pixels and also by the number of bits per pixel. Commonly, a color bitmap defined in the RGB (red, green blue) color space may comprise between one and eight bits per pixel for each of the red, green, and blue channels. An alpha channel may be used to store additional data such as per-pixel transparency values.
Digital video may include such digital images. For example, a digital video sequence may include multiple frames. Each frame may include one or more digital images. Each of the digital images in a frame may include transparency information which is used to determine how the images are combined in the frame. A digital video editing program, such as a video compositing application, may be used to create and edit a digital video sequence.
One of the basic problems posed to graphics processors pertains to how to efficiently and quickly render multicolored vector art or, more accurately, how to efficiently and quickly render an acceptable approximation, e.g. a smaller version, of arbitrarily-colored vector art. For example, a graphics application may allow a user to design a video containing content such as images, text, or iconography. The text and iconography constitute the multicolored vector art and are represented by vectors, curves, lines, and the like. The text and iconography are not the images. This is an important distinction because certain effects can be applied to the text and iconography that would not look as good on the images. Such effects can include, for example, zooming in and out, spinning in 3-D space, and the like. One area of application is in interactive applications such as computer games, where these types of effects are applied quite frequently.
Often times when such effects are applied to images, content of the image can become undesirably visually distorted. For example, once an image is magnified, the edge of a given color in the image starts to get very close to the camera or point of view, and one can start to see the corresponding pixels fairly clearly and various other artifacts, such as pixels that are undesirably and inaccurately spaced relative to one another. This is undesirable and can degrade the user's experience.
Approaches have been attempted, in the past, to deal with this problem. One typical solution or approach is to pre-rasterize vector art to a raster image and use the image as a texture. This solution is undesirable because it is slow and inefficient and requires an undesirable amount of resource overhead. Another solution is to tessellate the vector art and use the GPU to fill triangles or other primitives provided by the tessellation. Again, this solution is undesirable because of the processing inefficiencies and undesirable amount of resource overhead required. These and other solutions can also lead to visually-displeasing results due to visually-perceptible and fairly undesirable color distortions at the boundaries or edges of images.